package com.wanggan.design.builder;

import java.util.ArrayList;

/**
 * @author wanggan
 */
public abstract class CarModel {
        
        //这个参数是各个基本方法执行的顺序
        private ArrayList<String> sequence = new ArrayList<String>();
        
        /*
         * 模型是启动开始跑了
         */
        protected abstract void start();
        
        //能发动，那还要能停下来，那才是真本事
        protected abstract void stop();
        
        //喇叭会出声音，是滴滴叫，还是哔哔叫
        protected abstract void alarm();
        
        //引擎会轰隆隆的响，不响那是假的
        protected abstract void engineBoom();
        
        //那模型应该会跑吧，别管是人推的，还是电力驱动，总之要会跑
        final public void run() {
            
            //循环一遍，谁在前，就先执行谁
            for(int i=0;i<this.sequence.size();i++){
                String actionName = this.sequence.get(i);
                
                if(actionName.equalsIgnoreCase("start")){ //如果是start关键字，
                    this.start(); //开启汽车
                }else if(actionName.equalsIgnoreCase("stop")){ //如果是stop关键字
                    this.stop(); //停止汽车
                }else if(actionName.equalsIgnoreCase("alarm")){ //如果是alarm关键字
                    this.alarm(); //喇叭开始叫了
                }else if(actionName.equalsIgnoreCase("engine boom")){ //如果是engineboom关键字
                    this.engineBoom(); //引擎开始轰鸣
                }
    
            }
    
        }
    
        //把传递过来的值传递到类内
        final public void setSequence(ArrayList<String> sequence){
            this.sequence = sequence;
        }
    
    }
